python-手把手教你做图片识别:Pillow+pytesseract+tesseract
爬虫俱乐部之前推出的线下培训,得到了各位老师的一致好评。为了更加方便大家学习,满足更多Stata用户的学习需求,爬虫俱乐部已隆重推出在线直播课程,请大家奔走相告!课程报名链接:https://ke.qq.com/course/286526#tuin=9735fd2d,详情见推文《爬虫俱乐部隆重推出网上直播课程第一季》
有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~
喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~
好消息:爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!
前几天笔者在网上看到python做图像识别的相关文章之后,真心觉得python的功能实在是太强大了,于是蠢蠢欲动想要亲手动手试试,但是在安装和调试的过程中遇到了不少问题,因此写一篇图片识别相关模块的安装及配置过程分享给大家。如果想要让python具有图片识别的能力,它必须有三个得力助手:
Pillow+tesseract+pytesseract。
Python-tesseract 是光学字符识别Tesseract OCR引擎的Python封装类。能够读取任何常规的图片文件(JPG, GIF ,PNG , TIFF等)并解码成可读的语言。在OCR处理期间不会创建任何临文件。PIL (Python Imaging Library)是 Python 中最常用的图像处理库,其中pillow是PIL的分支,但是PIL只支持到python2.7版本,而pillow支持到python3,因此本文使用的是pillow。Image 类是 PIL 库中一个非常重要的类,通过这个类可以处理三种来源的图片,分别是:直接载入图像文件、读取处理过的图像、通过抓取的方法得到的图像。python对图像的处理比较常见的是用pytesseract识别验证码,要安装pytesseract库,必须先安装其依赖的PIL及tesseract-ocr,其中PIL为图像处理库,而后面的tesseract-ocr则为google的ocr识别引擎。
一、安装相关模块
我使用的是PycharmIDE,由于pytesseract需要第三方安装,在Pycharm中很多基本模块可以直接进行安装,安装Pillow模块和pytesseract模块的具体操作流程如下:
当然如果你们使用的是非Pycharm的PythonIDE,可以在终端键入pip install pillow。
二、初步运行找出错误
安装完毕后,我们就能进行简单的图像识别工作。有过爬虫经验的童鞋们,都知道有些较为复杂的网站会设置一系列复杂的反爬技术,其中一项就是输入图片中的数字,如下图:
具体程序如下:
import pytesseract
from PIL import Image
image = Image.open("e:/aa.png")
text = pytesseract.image_to_string(image)
print(text)
首先导入两个相关的模块,接着将图片的信息储存在image这个变量中,最核心的识别难题只需要通过pytesseract.image_to_string()就能解决。
可是pycharm却报错了:
三、下载tesseract-ocr安装包并调试
运行为什么会报错呢?这是没有安装tesseract-ocr的缘故,tesseract-ocr是tesseract库可以正常使用的依赖环境。该安装包可以在https://github.com/UB-Mannheim/tesseract/wiki中获得。在安装过程中有一点值得注意,在扩展语言中可以选择自己希望安装的语言包,这可以让我们在图片中识别出我们想要的文字:
在默认情况,图片识别只包含英文和数字,并没有包含中文,因此在扩展语言中,我们可以选择简体中文和繁体中文:
下载完毕之后,回到安装包所在的路径,你可以发现出现了这两个新的插件:
我们需要将这两个插件复制到默认路径C:\Program Files (x86)\Tesseract-OCR\tessdata下:
通过以上操作,我们就可以用来识别图片中的中文了。
由于在pycharm报错提示中有FileNotFoundError: [WinError 2] 系统找不到指定的文件,解决的方法有三种,在这里介绍其中一种:
在实际运行代码中指定环境路径:
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files(x86)/Tesseract-OCR/tesseract.exe'
四、运行程序
好了,配置的问题算是解决了,让我们再运行以下程序吧:
import pytesseract
from PIL import Image
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract.exe'image = Image.open("e:/aa.png")
text = pytesseract.image_to_string(image)
print(text)
得到:
接下来我们还可以尝试含有英文或者中文的图片:
image = Image.open("e://sentence.png")
text = pytesseract.image_to_string(image,lang='chi_sim')
print(text)
下图的上部分为原图,下部分为python解析出来的结果:
值得注意的是在识别含有中文的图片时,需要在lang这个选项中指定chi_sim:
image = Image.open("e:/denggao.jpg")
txt= pytesseract.image_to_string(image,lang='chi_sim')
print(txt)
其实,我们仔细观察识别结果,个别字母没有被识别出来,或者个别汉字识别错误,但是总体上识别准确率还是挺高的。
最后我们将识别出来的结果保存到一个txt文档中,如果是中文,可以指定编码为utf-8编码:
with open("e://output.txt", "w",encoding='utf8') as f:
print(text)
f.write(str(text))
五、封装成一个函数
最后我们将这些封装成一个函数如下:
import pytesseract
from PIL import Image
def main(path1,path2):
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract.exe'
image = Image.open("path1")
text = pytesseract.image_to_string(image)
with open("path2", "w", encoding='utf8') as f:
f.write(str(text))
return text
在这个函数中,path1为图片所在的路径及图片名,path2为识别结果储存的路径及文件名,
print(main("e:/aa.png","e:/output.txt"))
注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
文字编辑:赵宇亮
技术总编:刘贝贝
往期推文推荐:
2.hello,MySQL--Stata连接MySQL数据库
3.hello,MySQL--odbcload读取MySQL数据
9.想看什么书?Stata君帮你寻!——爬取中南财大图书馆书目信息
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。